/*
 * 文件名：IOrderInfoService.java
 * 版权：Copyright by www.huawei.com
 * 描述：
 * 修改人：zhangshaohua
 * 修改时间：2016年4月25日
 * 跟踪单号：
 * 修改单号：
 * 修改内容：
 */

package com.zcsy.manage.service.mall;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.zcsy.manage.model.mall.GoodsInfo;
import com.zcsy.manage.model.mall.OrderDetailInfo;
import com.zcsy.manage.model.mall.OrderInfo;
import com.zcsy.manage.model.mall.OrderMoney;
import com.zcsy.manage.model.mall.ShoppingCart;
import com.zcsy.manage.model.system.User;

/**
 * 
 * @Title: IOrderInfoService.java
 * @Package： com.zcsy.manage.service.mall 
 * @Description: 订单服务层
 * @author zhangsh zsh3384027@gmail.com
 * @Copyright: 2016 武汉恒数利通技术有限公司 All rights reserved.
 * @date 2016年4月25日
 * @version 1.0
 * @see JDK1.8.0_45
 * @since
 */
public interface IOrderInfoService {
	
	/**
	 * 
	 * @Description 生成订单
	 * @param orderInfo
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int insert(OrderInfo orderInfo);
	
	/**
	 * 
	 * @Description 修改订单
	 * @param orderInf
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int update(OrderInfo orderInf);
	
	/**
	 * 取消订单
	 * @Method: cancelOrder
	 * @Description 1、更新订单状态
	 *              2、更新库存
	 * @param orderId 订单id
	 * @author hubing
	 */
	void cancelOrder(String orderId);
	
	int updateByParentOrder(OrderInfo orderInf);
	
	/**
	 * 
	 * @Description 根据id获取订单信息
	 * @param id
	 * @return 
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	OrderInfo selectOrderByPrimaryKey(String id);
	
	OrderInfo selectByOrderNumber(String no);
	
	/**
	 * 
	 * @Description 根据id删除订单信息
	 * @param id
	 * @return 1:成功 0：失败
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	int deleteByPrimaryKey(String id);
	
	/**
	 * 
	 * @Description 根据关键信息获取订单列表
	 * @param orderInf
	 * @return 
	 * @author zhangsh zsh3384027@gmail.com
	 * @date 2016年4月25日
	 * @see
	 */
	List<OrderInfo> selectByKeyword(OrderInfo orderInf);
	
	/**
	 * @Description:根据关键信息，查询商户订单（只含type为1的正常订单）
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月26日
	 */
	List<OrderInfo> selectSellerOrderListByKeyword(OrderInfo keyword);
	
	List<OrderDetailInfo> getOrderDetailByOrderId(String orderId);

	
	/**
	 * @Description 修改订单状态<br>
	 *  @param id:订单Id state:订单状态 
	 * 
	 * @return 操作结果
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年4月25日
	 * @see 
	 */
	int updateOrderStateByMap(String id,int state, String userAccount);
	
	/**
	 * 
	* @Title: selectAccountsFromOrderByRoles 
	* @Description: 根据订单id列表和角色Value列表查询用户登录名列表
	* @param orderList 订单id列表
	* @param roleIds 角色Value列表
	* @return 用户登录名列表
	* @author wangj 1157360454@qq.com   
	* @date 2016年6月13日 
	* @throws
	 */
	List<String> selectAccountsFromOrderByRoles(String orderId, List<String> menuValues);
	
	/**
	 * @Description 根据用户登录名和状态查询订单<br>
	 * 
	 * @param map state:订单状态
	 *            userAccount:用户登录名
	 * @return 返回用户各状态订单列表
	 * @author caiyinli 13277030520@163.com
	 * @date 2016年7月10日
	 * @see 
	 */
	List<OrderInfo> selectByStateAndUserAccount(Integer state,Integer reviewState,String userAccount);
	
	List<OrderInfo> selectOrderInfoAll(Integer state,String userAccount);
	
	/**
	 * @Description:查询我的当前小区里面的所有订单
	 * @param state 订单状态
	 * @param userAccount 用户登录名
	 * @param cellId 小区Id
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月3日
	 */
	List<OrderInfo> selectOrderInfoMyCurrentCell(String userAccount, String cellId);
	
    /**
     * 
     * @Description <br>
     * 计算订单价格方法
     * @param detailList 购物车记录列表
     * @param member 会员信息
     * @return 订单金额对象
     * @author caiyinli 13277030520@163.com
     * @date 2016年7月15日
     * @see
     */
    OrderMoney setOrderCost(List<ShoppingCart> detailList,User user);
    
    /**
     * @Method: getShopOrderSum
     * @Description 查询首页订单数量汇总
     * @param map
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月19日
     * @see 
     */
    Integer getShopOrderSum(Map<String, Object> map);
    
    /**
     * 
     * @Description <br>
     * 保存订单明细方法
     * @param recore 订单明细
     * @return  保存结果
     * @author caiyinli 13277030520@163.com
     * @date 2016年7月20日
     * @see
     */
    int saveOrderDetail(OrderDetailInfo recore); 
    
    /**
     * @Method: selectByShopIdAndState
     * @Description 根据店铺id和订单状态查询订单
     * @param map（shopId店铺id，state订单状态）
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月25日
     * @see 
     */
    List<OrderInfo> selectByShopIdAndState(String shopId, Integer state);
    
    /**
     * @Description:根据店铺id和订单状态字符串查询订单
     * @param map String shopId店铺id，
     *             String states订单状态
     * @author huangls 1449700087@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> selectOrderListByShopIdStates(String shopId, String states);
    
    /**
     * @Method: selectAfterSaleByShopId
     * @Description 查找店铺里售后的订单
     * @param shopId
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月26日
     * @see 
     */
    List<OrderInfo> selectAfterSaleByShopId(String shopId);
    
    /**
     * @Method: selectByPrimaryId
     * @Description 根据订单id查询订单
     * @param id
     * @return 
     * @author liuziyu liuziyuwri@foxmail.com
     * @date 2016年7月27日
     * @see 
     */
    OrderInfo selectByPrimaryId(String id);
    
    /**
    * @Method: getOrderAndGoodsInfo
    * @Description 根据关键字查询所需记录
    * @param orderInfo
    * @return List<OrderInfo>
    * @author yangfan 373188993@qq.com
    * @date 2016年7月27日
    * @see 
    */
    List<OrderInfo> getOrderAndGoodsInfo(OrderInfo orderInfo);
    //紧查询所需订单 用于app分页
    List<OrderInfo> getOrderByKeyWords(OrderInfo orderInfo);
    
    /**
	 * @Description:获取不同状态下当前小区的全部订单
	 * @param map cellId: 小区id
	 *            userAccount:用户登录名
	 *            states:订单状态字符串
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月4日
	 */
	List<OrderInfo> selectOrderInfoByCellIdStateUserAccount(String cellId, String userAccount, String states);
	
	/**
	 * @Description:根据主键查询订单信息，及订单下的订单详情信息，商品信息
	 * @param id 主键Id
	 * @return 
	 * @author huangls 1449700087@qq.com
	 * @date 2016年8月4日
	 */
	OrderInfo selectOrderInfoAllById(String id);
	
	/**
     * @Description:仅仅查询订单列表
     * @param map cellId: 小区id
	 *            userAccount:用户登录名
	 *            orderLevel:订单等级
	 *            parentId:父订单
     * @return 订单列表
     * @author huangls 1449700087@qq.com
     * @date 2016年8月10日
     */
    List<OrderInfo> selectOrderInfoList(String cellId, String userAccount, String states);
    
    List<OrderInfo> selectOrderAllInfoList(String cellId, String userAccount);
    
    /**
     * 支付订单
     * @Method: payOrder
     * @param orderId 订单编号
     * @param obj 支付返回结果
     */
    void payOrder(String orderNo, Object obj);
    
    List<OrderInfo> selectByKeywordCommand(OrderInfo orderInf);
    
    
    /**
     * 
     * @Description 取出近90天所有已完成订单<br>
     * @param shopId 店铺id
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月24日
     */
    List<OrderInfo> selectCompletedOrder(String shopId);
    
    /**
     * 
     * @Description 取出近90天所有已取消订单<br>
     * @param shopId 店铺id
     * 
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月24日
     */
    List<OrderInfo> selectCanceledOrder(String shopId);
    
    /**
     * 
     * @Description 根据选择的时间取出所有已完成订单<br>
     * 
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @param shopId 店铺id
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     * @see
     */
    List<OrderInfo> searchCompletedOrderByTime(String beginDate, String endDate,String shopId);
    
    /**
     * 
     * @Description 根据选择的时间取出所有已取消订单<br>
     * 
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @param shopId 店铺id
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     * @see
     */
    List<OrderInfo> searchCanceledOrderByTime(String beginDate, String endDate,String shopId);
    

    /**
     * 
     * @Description 获取每月已完成订单数<br>
     * 
     * @param secType 搜索类型：1、固定搜索，2、自由搜索
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @param shopId 店铺id
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCompletedOrderByMonth(Integer secType,String beginDate, String endDate,String shopId);
    
    /**
     * 
     * @Description 获取每月已取消订单数<br>
     * 
     * @param secType 搜索类型：1、固定搜索，2、自由搜索
     * @param beginDate 开始时间
     * @param endDate 结束时间
     * @param shopId 店铺id
     * @return 
     * @author lilan 1063972142@qq.com
     * @date 2016年8月26日
     */
    List<OrderInfo> searchCanceledOrderByMonth(Integer secType,String beginDate, String endDate,String shopId);
    
    /**
     * @Description:批量更新订单状态，将待商家确认改为退款申请，用于定时器
     * @author huangls 1449700087@qq.com
     * @date 2016年8月29日
     */
    int updateStateBeRefundAll();
    
    /**
     * @Description:批量更新订单状态，将配送已送达改为确认收货，用于定时器
     * @author huangls 1449700087@qq.com
     * @date 2016年8月29日
     */
    int updateStateBeenSenddAll();
    
    List<OrderInfo> selectOrderByParentId(String parentId);
}
